在上一篇我們介紹了一些 Pytest 套件內實用的裝飾器,今天我們就繼續介紹其他有趣的裝飾器吧
@pytest.mark.xfail
這個裝飾器是用來標記一個預期會失敗的測試,就算測試失敗也會被視為測試成功
下面的範例我將test_add()
測試函數上面加上了@pytest.mark.xfail
,並且將測試參數都改成錯誤的
project_test.py
import project
import pytest
@pytest.mark.xfail(reason="已知問題,待修復")
@pytest.mark.parametrize("a, b, return_", [
(1, 2, 4),
(2, 7, 10),
(2, 8, 11),
])
def test_add(a, b, return_):
assert project.add(a, b) == return_
測試結果
可以從測試結果看到,雖然偵測到 Fail,但仍然沒有回報錯誤
@pytest.mark.timeout
這個裝飾器用來測試是否超過設定的最大運行時間,如果超過時間,則會被視為測試失敗
但在使用這個裝飾器之前,要先安裝 Pytest 延伸的套件,Pytest-timeout,因為這個裝飾器 Pytest 沒有內建在裡面
在終端機中輸入以下指令
pip install pytest-timeout
可利用下列指令確認是否有安裝成功
pip list | grep pytest-timeout
下面的範例我會將被測試檔裡面的add()
函數加上兩秒的時間延遲,故意讓測試失敗
project.py
import time
def add(a, b):
time.sleep(2)
return a+b
然後在test_add()
函數上面加上@pytest.mark.timeout(1)
,超過一秒就會測試失敗
project_test.py
import project
import pytest
@pytest.mark.timeout(1)
@pytest.mark.parametrize("a, b, return_", [
(1, 2, 3),
(2, 7, 9),
(2, 8, 10),
])
def test_add(a, b, return_):
assert project.add(a, b) == return_
測試結果
可以看到測試失敗了,並且回報執行時間大於一秒
今天就先介紹到這邊,剩下的 Pytest 裝飾器我會在下一篇介紹完畢!